を
事前に感謝し、よろしく panduroこれを行っていますモーター。私は(DRV8825、A4899チップ)のステッパードライバーコードを作成し、コードはiRQベースで、モーターの加速、スピードなどの計算をしました。しかし、正確かどうかをテストしなければならなかったので、ステップ数を数えなければなりませんでした。 テストケースの場合、コンクリートピンをETR(外部トリガ入力)として設定しました。これは入力ピンですが、私のステッパー出力ピンはその入力に行きます(もちろんモータにも行きます)。そして、それぞれの立ち上がりまたは立ち下がりエッジ(設定に依存します)はirqを生成します。したがって、irqでは、あなたのケースのパルスでステップカウンタを設定することができます。
私はcubeMXに精通していません。ほとんどの場合、古いSPL(標準的なペリフェラルドライバ)を登録したり使用したりするために直接書きます。私はcubeMXユーザーにとってより読みやすいはずなので、SPLとどのように動作するかを示します。とにかく
私はちょうどit.This具体的なコードはまず
入力端子(わずか数のピンが外部トリガとして、コンクリートタイマーで動作することができますデータシート読む)を設定STM32f030上で動作行う方法を基本的な考え方を示すようにしてみてください
void digital_input_config (void){
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_2);
}
ここでタイマー設定が必要です。タイマーごとにETRとピンが異なるため、STM32 MCUによって異なります。データシートを正確に読み取る必要があります。
void enable_capture_TIM1(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_DIV_NONE,TIM_ExtTRGPolarity_NonInverted,0x00);
TIM_SelectInputTrigger(TIM1,TIM_TS_ETRF);
TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Trigger);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = TIM1_BRK_UP_TRG_COM_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM1, ENABLE);
TIM_ITConfig(TIM1, TIM_IT_Trigger, ENABLE);
}
そして、IRQではパルスカウントが可能です。
void TIM1_BRK_UP_TRG_COM_IRQHandler(void){
if(TIM_GetITStatus(TIM1, TIM_IT_Trigger) != RESET) {
TIM_ClearITPendingBit(TIM1, TIM_IT_Trigger);
PulseCNT++;
}
}
このコードをパルスジェネレータでテストしたところ、実際には正確でパルスカウントや周波数測定に使用できます。