Chào bạn,
thông số động cơ của tớ là:
Ra= 2.1 ohm; La = 3.3 mH, moment inertia: J = 5.5x10^(-4); Kt= 0.11N.m/A, damping ratio b= 0.29
Động cơ tớ mua là đồ second hand, cái nhãn bị mờ ròi nên nhìn không rõ, nên lên mạng tìm và thấy cái này có hình rất giống thôi, không biết chính xác hay không nữa.
còn về đoạn code trên thì tớ giải thích ngắn gọn thế này: tớ dùng timer0 ở chế độ ngắt tràn để đếm xung ngoài từ encoder, timer1 ở chế độ ngắt tràn.
đoạn chương trình trên có thể viết lại như sau
v_cur = timer0_interupt_number*2*(255 - START_VALUE_TIMER0) + 2*(get_timer0() - START_VALUE_TIMER0);
+ v_cur: số xung đếm được trong mỗi chu kì ngắt timer1
+ timer0_interupt_number: số làn timer0 tràn trong mỗi chu kì ngắt timer1
+ START_VALUE_TIMER0 giá trị nạp cho thanh ghi timer0 ban đầu
+ phải nhân 2 vì ở chế độ đếm xung ngoài thì scaler min =2, (coi datasheet)
+ Nhân (255 - START_VALUE_TIMER0) là số xung mỗi lần timer0 tràn
+ Cộng 2*(get_timer0() - START_VALUE_TIMER0) vì khi ngắt timer1 thì timer0 vẫn đang đếm nên phải cộng thêm giá trị hiện tại của timer0.
chút vui
|