Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titleonTransferReceived
void onTransferReceived(CanardInstance* ins, CanardRxTransfer* transfer)
{
    if ((transfer->transfer_type == CanardTransferTypeRequest) &&
    (transfer->data_type_id == UAVCAN_GET_NODE_INFO_DATA_TYPE_ID))
    {
        canardGetNodeInfoHandlegetNodeInfoHandleCanard(transfer);
    } 

    if(transfer->data_type_id == UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_ID)
    { 
        canardRawcmdHandlerawcmdHandleCanard(transfer);
    }
}

We added support of UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_ID, message that contains all values needed to generate RCPWM signal. UAVCAN GUI Tool starts to broadcast these messages when ESC Management panel is opened. 

...

Code Block
titlecanard_rawcmd_handle
void canardRawcmdHandlerawcmdHandleCanard(CanardRxTransfer* transfer)
{
    int16_t ar[6] = {0,0,0,0,0,0};
    int offset = 0;
    for(int i = 0; i<6; i++)
    {
        if(canardDecodeScalar(transfer, offset, 14, true, &ar[i])<14) {break;}
        offset += 14;
    }
    rcpwmUpdate(ar);
}

const rcpwm_t rcpwm_outputs[] = 
{
    {TIM12, 1, "TIM12_CH1_PA4"},
    {TIM12, 2, "TIM12_CH1_PA5"},
    {TIM3,  1, "TIM3_CH1_PA6"},
    {TIM3,  2, "TIM3_CH2_PB0"},
    {TIM3,  3, "TIM3_CH3_PB6"},
    {TIM3,  4, "TIM3_CH4_PB7"}
};

void rcpwmUpdate(int16_t ar[6])
{
    for(char i = 0; i < 6; i++ )
    {
        uint32_t val = RCPWM_NEUTRAL_uS;
        ar[i] = ar[i] * RCPWM_MAGNITUDE_uS / UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_MAX_VALUE;
        val += ar[i];
        TIM_SetCompare(rcpwm_outputs[i].timer,rcpwm_outputs[i].channel, uS_to_ticks(val));
    }
}


static void TIM_SetCompare(TIM_TypeDef* TIMx, uint8_t ch, uint32_t Compare)
{
    if(ch == 1)  
    {
        TIMx->CCR1 = Compare;
        return;
    }
    if(ch == 2)  
    {
        TIMx->CCR2 = Compare;
        return;
    }
    if(ch == 3)  
    {
        TIMx->CCR3 = Compare;
        return;
    }
    if(ch == 4)  
    {
        TIMx->CCR4 = Compare;
        return;
    }
}

...