簡體   English   中英

如何在帶有定時器的STM32F103上為控制伺服電機生成PWM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM