刚开始使用stm32,准备使用STM32来做电机驱动,在测试ADC1和TIM1的时候遇到一些困惑,PWM频率在20KHz,求解答下。
我在使用ADC1的时候使用规则通道+DMA进行一些不重要的数据采样,像外部的电压,温度等一些值的时候,结果发现一个问题,
我利用一个变阻器测试发现调节变阻器的时候会影响其他几个通道的采样值,后来把采样时间改为最大,值的结果才不受影响,这个不知到是我使用的模式需要这么长时间还是哪里设置的问题?
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);//hand
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);//external temperature
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);
还有一个就是TIM1的使用了,我用CCR1/CCR2/CCR3来产生3相PWM,用CCR4来产生捕获/比较中断来触发ADC1的注入通道,
ADC_InjectedSequencerLengthConfig(ADC1, 1);
ADC_InjectedChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_7Cycles5);//CURRENT
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_CC4);//这个可以使用time1的CCR4事件来触发采样
并在注入采样转换结束后产生中断,在中断里对管脚翻转信号,来测试是否在PWM—ON的中点产生中断,CCR4的pluse设置为其他的一半,结果在占空比大的情况下比较好,在占空比10%以下,发现这个信号是在PWM-on结束之后才翻转的,试了CCR4自己的中断,也发现信号翻转和我设置的有比较大的误差,不知道这个延迟是哪里的问题,端口设置为推挽输出的。
|