・2008年5月20日(書き始め)その後遅延しています
付属の加速度センサーと付属ソフトウェアを使って、ロボットの加速度を測定してみます。モーター制御などはしていません。
付録のSTM32に書き込まれているVirtualCOMPortをいったん消してしまうと、再度書き込みに苦労します。DWM5月号は説明不足ということなので、
参考記事があります。書かれているとおりに実行し、動きました。Acc3_V5_gainer\project\RVMDK\VirtualCOMPort.Uv2のプロジェクトには加速度センサー読み込み関数が組み込まれています。
助かりました。 念のため、DWM6月号P52に書かれている(5)割り込みテーブルの移動については、そのままプログラムの中に追記しました。
PCへの加速度データ取り込みはVBプログラムを作成し、データ処理はEXELで行います。Gainerは使っておりません。
(写真1)を動かしたとき(動画)の加速度をPCへ取り込んでみました。
/*******************************************************************************
* Function Name : main.
* Description : Main routine.
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void main(void)
{
#ifdef DEBUG
debug();
#endif
Set_System();
Set_USBClock();
USB_Interrupts_Config();
Led_Config();
Channel_Config();
USB_Init();
Led_RW_ON();
// NVIC init ajima
#ifdef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000); /* ********* 追加 offset記述 */
#endif
sendFlg = 0;
while (1)
{
if (count_out != 0)
{
checkCommand();
count_out = 0;
}
switch( mode )
{
case 'G':
if(sendFlg > 0)
{
delay(CNT_DELAY);
GAINER_To_USB_Send_Data(); /*8bit A/D value controled */
}
break;
case 'A': /* コマンド 'A'で 加速度データ送信が始まります */
delay(CNT_DELAY);
ACC_To_USB_Send_Data(); /* 12bit A/D value */
break;
default:break;
}
}
}
また hw_config.cのACC_To_USB_Send_Data()は加速度データX,Y,ZをUSBポートに転送する関数です
/*******************************************************************************
* Function Name : ACC_To_USB_Send_Data.
* Description : send the data as Accelerator.
* Input : None.
* Return : none.
*******************************************************************************/
void ACC_To_USB_Send_Data(void)
{
u16 x, y, z;
x = ADC_RegularConvertedValueTab[0];
y = ADC_RegularConvertedValueTab[1];
z = ADC_RegularConvertedValueTab[2];
sprintf((char*)buffer_in, "%d,%d,%d,\r", x, y, z);
count_in = strlen((char*)buffer_in);
UserToPMABufferCopy(buffer_in, ENDP1_TXADDR, count_in);
SetEPTxCount(ENDP1, count_in);
SetEPTxValid(ENDP1);
}