ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
620908 Топик полностью
m16_home (23.09.2015 15:35, просмотров: 254) ответил Codavr на О да ПИД регулятор наше все, а слабо фильтр Калмана для многомерной системы на ассемблере реализовать и отладить. Можно в две строки. Нет, ну были времена когда это ваще в машинных кодах делали, но очень недолго. Нынче все же предпочитают на более
фильтр Калмана? вполне возможно осилить, пока нет нужды. имхо асмом тоже нужно уметь пользоваться. порой смотришь на асмовые исходники и приходишь к мысли что от машинных кодов они не далеко ушли. полином третьего порядка без гемора ;********************************************************** ; Constant ;********************************************************** .equ k1 = 158850330 // 977DD1A .equ k2 = 1104840 // 0x10DBC8 .equ k3 = 1373 // 0x55D .equ k4 = 3 .equ kp1 = 10 .equ kp2 = 1000000000 // 0x3B9ACA00 .equ kt = 200 // 0xC8 ;********************************************************** ; S - (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2 ;********************************************************** ; Data memory ;********************************************************** .dseg //spt_curr: .byte 2 spt_20: .byte 2 .cseg ;********************************************************** ; Macros ;********************************************************** .macro summary add_d dC, @1 adc_w D0, @0 // pre set D1 = 0 .endm ;********************************************************** calc_sprt: clr_w D0 .......................................... ; k1 ldi_d dE, k1 mov_d dC, dE // summary= k1 .......................................... ; k2*spt ldi_d dH, k2 lds_w E0, spt_curr mul_d_w // G0 : dF = dH * E0 summary G0, dF // summary= k1 + k2*sprt .......................................... ; sprt^2 mov_w E1, E0 mul_w // dF = E1 * E0 push_d dF // story sprt^2 .......................................... ; sprt^3 mov_d dH, dF mul_d_w // G0 : dF = dH * E0// G0:dF = sprt^3 .......................................... ; sprt^3*k4 ldi tmpA, k4 mov_d dH, dF mul_d_b // G0 : dF = dH * tmpA .......................................... ; sprt^3*k4/kp1 ldi tmpA, kp1 div_wd_b // G0 : dF = G0 : dF / E0l summary G0, dF // summary = k1 + k2*spt + sprt^3*k4/kp1 .......................................... ; k3*spt^2 ldi_w E0, k3 pop_d dH // dH = sprt^2 mul_d_w // G0 : dF = dH * E0 sub_d dC, dF sbc_w D0, G0 // summary = k1 + k2*spt + sprt^3*k4/kp1 - k3*spt^2 .......................................... ; temper - kt lds_w E0, temper ldi_w E1, kt sub_w E0, E1 .......................................... ; (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) mov_d dF, dC muls_d_w // H0 : dG = dF * E0 .......................................... ; (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2 ldi_d dE, kp2 mov_d dF, dG mov_w G0, H0 divs_wd_d // G0 : dF = G0 : dF / dE (signed) .......................................... ; S - (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2 lds_w E0, spt_curr sub_w E0, F0 sts_w spt_20, E0 // store result ret