正交编码器程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面是调试O K的代码:
voi d Enc oder_Confi grati on(vo id)
{
GPIO_Init TypeD ef GP IO_In itStr uctur e;
TI M_Tim eBase InitT ypeDe f TIM_Time BaseS truct ure;
TIM_I CInit TypeD ef TI M_ICI nitSt ructu re;
//PC6 A相P C7 B相
GPIO_Init Struc ture.GPIO_Pin = GPIO_Pin_6 | G PIO_P in_7;
GPIO_Init Struc ture.GPIO_Mode= GPI O_Mod e_IN_FLOAT ING;
GPIO_InitS truct ure.G PIO_S peed= GPI O_Spe ed_50MHz;
GPIO_Init(GPIOC,&GPI O_Ini tStru cture);
/* Ena ble t he TI M3 Up dateInter rupt*/
/*NVIC_InitS truct ure.N VIC_I RQCha nnel= TIM3_IRQ Chann el;
N VIC_I nitSt ructu re.NV IC_IR QChan nelPr eempt ionPr iorit y
= T IMx_P RE_EM PTION_PRIO RITY;
NVIC_Init Struc ture.NVIC_IRQCh annel SubPr iorit y = T IMx_S UB_PR IORIT Y; NV IC_In itStr uctur e.NVI C_IRQ Chann elCmd = EN ABLE;
NVIC_Init(&NVI C_Ini tStru cture);*/
/* T imerconfi gurat ion i n Enc odermode*/
T IM_Ti meBas eStru cture.TIM_Presc aler= 0x0; //No pr escal ing
TIM_T imeBa seStr uctur e.TIM_Peri od =10000;
TI M_Tim eBase Struc ture.TIM_C lockD ivisi on =TIM_C KD_DI V1;
T IM_Ti meBas eStru cture.TIM_Count erMod e = T IM_Co unter Mode_Up;
TIM_Time BaseI nit(T IM8,&TIM_TimeB aseSt ructu re);
TIM_Encod erInt erfac eConf ig(TI M8, T IM_En coder Mode_TI12,
TIM_ICPol arity_Risi ng, T IM_IC Polar ity_R ising);
TI M_ICS truct Init(&TIM_ICIni tStru cture);
TI M_ICI nitSt ructu re.TI M_ICF ilter = 6;//ICx_FILT ER;
T IM_IC Init(TIM8, &TIM_ICIn itStr uctur e);
// Cl ear a ll pe nding inte rrupt s
TIM_Clea rFlag(TIM8, TIM_FLAG_Upda te);
TIM_I TConf ig(TI M8, T IM_IT_Upda te, E NABLE);
//Reset coun ter
T IM2->CNT = 0;
TIM_C md(TI M8, E NABLE);
}
n_Count er =TIM_G etCou nter(TIM8);
Dil ed_Di sp_Nu m((fl oat)n_Coun ter);
另外一个值得注意的问题是,S TM32的定时器是16位的,意思是只能计数到
65535,有两种方法,一是采用链式的方式用两个定时器将16位扩展为32位,还有一种简单的方法就是开启定时器的溢出中断,每中断一次就代表编码器运转了特定的角度。
比如编码器是400线的,将ARR寄存器设置为400,每溢出中断一次就代表电机转了一圈,以此类推。
另外,关于输入脉冲的检测,其实是类似的,只不过在STM32内部是专门用了一个外部触发模块来实现的,如图一中紫色框的标注,编码器模块应该是在这个模块上的升级,下面是配置代码:
void TIM3_ETR_GetDr opCou nts_C onfig urati on(vo id)
{
GPIO_InitT ypeDe f GPI O_Ini tStru cture;
TIM_T imeBa seIni tType Def T IM_Ti meBas eStru cture;
//tes t PA0 TIM8_ETR
GP IO_In itStr uctur e.GPI O_Pin = GP IO_Pi n_2;
GP IO_In itStr uctur e.GPI O_Mod e = G PIO_M ode_I N_FLO ATING;;
GPIO_Init Struc ture.GPIO_Speed = GP IO_Sp eed_50MHz;
G PIO_I nit(G PIOD, &GPI O_Ini tStru cture);
TIM_T imeBa seStr uctur e.TIM_Pres caler = 0x00;
TIM_Time BaseS truct ure.T IM_Pe riod= 0xF FFF;
TI M_Tim eBase Struc ture.TIM_C lockD ivisi on =0x0;
TI M_Tim eBase Struc ture.TIM_C ounte rMode = TI M_Cou nterM ode_U p;
TIM_TimeB aseIn it(TI M3, &TIM_T imeBa seStr uctur e); // Tim e bas e con figur ation
TIM_E TRClo ckMod e2Con fig(T IM3,
TIM_E xtTRG PSC_O FF, T IM_Ex tTRGP olari ty_No nInve rted, 0);
T IM_Se tCoun ter(T IM3,0);
TIM_Cmd(T IM3,ENABL E);
}
转帖》 http://bl og.ed nchin a.com/yemi ngxp/269451/mes sage.aspx
。