![](/img/trans.png)
[英]STM32F103 PWM with timer and DMA for WS2812 interrupt function constantly called
[英]How to Generate PWM for control servo motor on STM32F103 with Timer
如何使用計時器C代碼在STM32F103上為控制伺服電機生成PWM我想要通過PWM控制伺服電機我從ADC獲取值然后計算得出PWM占空比
流程圖獲取VR的值-> ADC模塊(將模數轉換為數字)->計算PWM占空比->使用定時器為控制伺服電機生成PWM-> while循環
對不起我的英語。
該代碼假定APB1時鍾= 72MHz Servo_Target為八分之一微秒,因此4000表示1ms(低伺服位置),而8000表示2ms(高伺服位置)警告:PWM頻率為463Hz,因此您不能將此設置用於模擬伺服。 它適用於無刷調節器。 如果要使用模擬伺服,則必須更改TIM_Prescaler,TIM_Period並考慮對Servo_Target值的影響
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 8192;
TIM_TimeBaseStructure.TIM_Prescaler = 18;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE); // Start PWM Timer
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
// THIS IS THE WIDTH in 1/8 us
TIM_OCInitStructure.TIM_Pulse = Servo_Target;
/* PWM1 Mode configuration: TIM2 Channel1 */
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/* PWM1 Mode configuration: TIM2 Channel2 */
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
// add OC3_ and OC4_ for 3rd and 4th channels
TIM_ARRPreloadConfig(TIM2, ENABLE);
我假設您正在使用IDE並用C編寫,但是我對該設備不熟悉。
基本上,您需要使用設備上有多個定時器,並為“輸出比較”中斷編寫中斷處理程序。 如果啟用了輸出比較中斷,則每次計時器中的值與某個寄存器中的值匹配時,就會調用您的處理程序。
一種常見的技術是使處理程序將引腳切換到伺服,然后更改輸出比較寄存器中的值,以使處理程序在下次需要時再次觸發。
if(off)
turn pin on
ocreg += pwm_value
else
turn pin off
ocreg += cycle-pwm_value
該引腳將保持正確的時間長度,並始終以相同的頻率導通。 您需要根據伺服規格為這些變量找到合適的值。
您可以使用另一個計時器定期采樣ADC,或者將其內置到與PWM相同的中斷處理程序中,甚至可以讓它在繁忙的循環中運行以等待ADC完成。
main()
loop
start ADC
while (ADC busy) { do nothing }
calculate pwm and store in variable pwm_value
loop
視伺服規格而定,您可能必須稍作修改以防止周期漂移,但是伺服通常是相當寬容的。
您需要找到適用於您的編譯器的中斷處理程序語法的示例,並始終閱讀有關如何使用寄存器來控制計時器和啟用中斷的手冊。
祝您好運,完成更多工作后,請發布帶有一些代碼的新問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.