MC0-Demo_PWM+ADC+DMA
-
- 需求
芯片系列:MC0
功能需求描述
3路pwm输出,20KHz频率,相位差90°和180°,占空比调节范围1%~99%
6通道adc采集
通过3路pwm高电平输出触发acd采集,每次触发采集adc的一个通道,采集完成用dma搬运,cpu不参与
基于mc0 evb
代码包:SDK 1.3.1
编译器:Gcc/IAR - 解决方案描述
MC0可以产生PWM输出的有MPWM和eTMR两个模块,因为M系列都有eTMR,有通用性,这里选用eTMR生成PWM输出;
选用ADC0产生6路ADC,采用PWM_ch1,ch2,ch3的上升沿触发硬件采样,逐次采集6个通道;
ADC不使用中断,选用DMA的方式进行数据搬运; - 示例说明
MC0选用eTMR0的ch0、ch1、ch2生成3路PWM输出;
产生90°和180°相位差,需要在配置PWM对齐模式时选用非对称模式,为了能在val0处触发trigger,ch0配置offset为10(给个较小的初始值即可),ch1配置offset为0x2000,ch2配置offset为0x4000,占空比调节直接调用eTMR_DRV_UpdatePwmChannel()函数即可;
ADC配置ch0-ch5共六个通道,配置为硬件触发,TMU模块的触发源选择eTMR0_EXT_TRIG;因为要通过pwm高电平输出触发acd采集,所以PWM配置为val0值触发trigger信号;
ADC的查询时钟要选择bus clock,其中MC0默认是bus clock,MD1和ME0是需要手动配置,否则可能出现ADC查询不到PWM的trigger信号的问题;
使用DMA的通道0来搬运ADC的6路采样数据,将数据从ADC的fifo里直接取到buffer里;
src一直是ADC->FIFO,dest每次后移2byte,顺序存储6路采样值;
- 工程代码
基于MC0_EVB板,eTMR0_CH1,eTMR0_CH2,eTMR0_CH3通过测量PTC1,PTC2,PTC3可以看到波形;
可以通过更改ADC_CH0 - ADC_CH5这六个ADC通道的采样值,观察adc_Result[0]-adc_Result[5]这六个buffer中对应的值是否改变;
Pwm_Adc_Dma_Demo.zip
- 需求
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...