STM32F407 xuất PWM cho ESC điều khiển brushless motor

#11
Vâng đúng rùi bác ạ, 1s cũng chạy được nhưng ko chờ nó 1 lúc thì nó ko chịu chạy đâu ạ
OK, cám ơn SMOD mta_cdt nhé , số lượng kinh nghiệm của Bác rất đáng nể >:D<.

Nãy giờ loay hoay hỏi bác Gúc Gồ mãi, giờ mới tìm ra được câu trả lời nằm ở đây ESC Calibration &#038; Programming | Mechatronics Project Site.

Té ra bộ ESC cần phải có thời gian để "cân chỉnh", nó phải chờ 2000ms (2s) để xác định độ rộng xung khi dừng và khi đạt tốc độ tối đa (từ 700ms đến 2000ms) dưới 700ms là nó không đọc được, như vậy Bác nói "1s cũng được" là hoàn toàn chính xác.

Bác giỏi thế mà sao vẫn không tìm ra được lời giải cho câu "Robot có biết yêu không nhỉ ?" :). Theo kinh nghiệm của mình thì câu trả lời sẽ là dạng sóng PWM 50%

Trêu bác tí thôi, đừng giận nhé.;)
 
Sửa lần cuối:

khoinguyen91

Học sinh trung cấp
#12
Sorry là cho mình hỏi.
Mình code trên con STM32F407 cho timer1 xuất PWM ra chân PA8 với chu kì 20ms(50Hz) và dutty 5%(1ms).
Như vậy thì theo lý là nó cứ ra xung như vậy mãi (> 2s) thì nó sẽ quay chứ nhĩ?
Đây là code của mình, dùng HAL library
PHP:
//TIM_Init();
    PreslacerValue = (uint16_t) ((SystemCoreClock) / 1000000) - 1; // 168/1-1;
    TIM_BaseStruct.Prescaler   = PreslacerValue;
    TIM_BaseStruct.CounterMode = TIM_COUNTERMODE_UP;
    TIM_BaseStruct.Period = 20000-1;
    TIM_BaseStruct.ClockDivision = 0;
    TIM_BaseStruct.RepetitionCounter = 0;
   
    TIM_HandleStruct.Instance = TIM1;
    TIM_HandleStruct.Init    = TIM_BaseStruct;
    if ( HAL_TIM_PWM_Init( &TIM_HandleStruct ) != HAL_OK )
    {
    Error_Handler();
    }
   
   
   
   
    //PWM_Init();
    TIM_OCStruct.Pulse = 1000;
    TIM_OCStruct.OCMode = TIM_OCMODE_PWM1;
    TIM_OCStruct.OCPolarity =TIM_OCPOLARITY_HIGH;
    TIM_OCStruct.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    TIM_OCStruct.OCIdleState = TIM_OCIDLESTATE_RESET; 
    TIM_OCStruct.OCNIdleState = TIM_OCNIDLESTATE_RESET;     
    HAL_TIM_PWM_ConfigChannel( &TIM_HandleStruct, &TIM_OCStruct, TIM_CHANNEL_1 );
    HAL_TIM_PWM_Start(&TIM_HandleStruct, TIM_CHANNEL_1);
 
#13
Sorry là cho mình hỏi.
Mình code trên con STM32F407 cho timer1 xuất PWM ra chân PA8 với chu kì 20ms(50Hz) và dutty 5%(1ms).
Như vậy thì theo lý là nó cứ ra xung như vậy mãi (> 2s) thì nó sẽ quay chứ nhĩ?
Đây là code của mình, dùng HAL library
Về code cho stm32 thì mình mù tịt, bạn nạp thử chưa nó có quay không ?

Ở trang web mình đã dẫn có hướng dẫn cách cân chỉnh ESC như sau (tác giả sử dụng con ESC Mystery 12A Brushless Speed Controller (Blue Series)): Đầu tiên gởi tín hiệu 2000ms đến ESC (ESC ở trạng thái ON) chờ 2 s, sau đó gởi tiếp tín hiệu 700ms chờ ESC hét lên tiếng "beep" lúc này đã cân chỉnh ESC xong.
 

khoinguyen91

Học sinh trung cấp
#14
Đầu tiên gởi tín hiệu 2000ms đến ESC (ESC ở trạng thái ON) chờ 2 s, sau đó gởi tiếp tín hiệu 700ms chờ ESC hét lên tiếng "beep" lúc này đã cân chỉnh ESC xong.
Mình dùng BLMT A2212/13T 1000KV.
Đầu tiên gởi tín hiệu 2000ms đến ESC (ESC ở trạng thái ON) chờ 2 s, sau đó gởi tiếp tín hiệu 700ms chờ ESC hét lên tiếng "beep" lúc này đã cân chỉnh ESC xong.
tín hiệu 2000ms là sao bạn, bạn nói ra cái tín hiệu 2000ms với 700ms đi
thank
 
#15
Mình dùng BLMT A2212/13T 1000KV.
Đầu tiên gởi tín hiệu 2000ms đến ESC (ESC ở trạng thái ON) chờ 2 s, sau đó gởi tiếp tín hiệu 700ms chờ ESC hét lên tiếng "beep" lúc này đã cân chỉnh ESC xong.
tín hiệu 2000ms là sao bạn, bạn nói ra cái tín hiệu 2000ms với 700ms đi
thank
Có vẻ bạn không chịu vào trang web mình đưa rồi.... "buồn ơi là sầu". :((

Về STM32 mình không biết, nhưng Arduino thì biết chút chút, bạn chịu khó đọc đoạn chương trình Arduino ở trang web nhé, ngay cả bạn chưa biết về Arduino cũng có thể hiểu được.
 

khoinguyen91

Học sinh trung cấp
#16
Như vậy là đầu tiên m cho PWM ra dutty 100% trong vòng 2000ms (2s) cho ESC. Sau đó mình cho dutty bình thường lại =5% cho ESC thì Brushless motor sẽ chạy dc ah. thank
 

tanh_ta

Học sinh phổ thông
#17
Mọi người chỉ rõ ràng rồi còn gì:
- Tạo PWM 50Hz
- Cho duty ra 5%
- Sau đó tăng dần là quay, ghi nhớ tối đa là 10% thôi.
 
#18
Như vậy là đầu tiên m cho PWM ra dutty 100% trong vòng 2000ms (2s) cho ESC. Sau đó mình cho dutty bình thường lại =5% cho ESC thì Brushless motor sẽ chạy dc ah. thank
Sưu tầm được bảng mã của một con ESC tặng bạn tham khảo, nguồn ESC Programming on Arduino (Hobbyking ESC) - All


Mặc dù đây là bảng mã này sử dụng cho quad copter nhưng hy vọng nó có thể giúp bạn phần nào.

Ý nghĩa của bảng mã này: dựa trên các tiếng beep phát ra từ ESC bạn có thể nhận biết nguyên nhân gây ra sự cố ví dụ: DDDD-DDDD-DDDD-DDDD (music19), ESC phát ra bốn lần mỗi lần bốn tín hiệu âm thấp, tra bảng cột thứ hai bạn biết rằng tần số PWM là 8K... v.v...
 

mta_cdt

Super Moderator
Thành viên BQT
#19
Chương trình thế này nhé.
Mã:
chuky=20000; // 20ms
pwm=1000; //1ms
delay_ms(2000);
while(1)
{
pwm=v; //1000<v<2000
}
 

khoinguyen91

Học sinh trung cấp
#20
anh mta_cdt có code trên KIT stm32f4 chưa vậy? sao e code PWM 20ms k có lỗi, mà k biết nó có ra đúng PWM 20ms k
làm sao test anh?
 

Quảng cáo Google