Skip to content
Snippets Groups Projects
Commit 677c875f authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Added a second dynamixel bus using 4 of the analog ports.

Added a dynamixel master on the second dynamixel bus.
Removed four analog ports and chnaged the interface registers.
parent 4546663b
No related branches found
No related tags found
No related merge requests found
......@@ -16,6 +16,7 @@ TARGET_FILES+=src/adc_dma.c
TARGET_FILES+=src/imu.c
TARGET_FILES+=src/darwin_dyn_slave.c
TARGET_FILES+=src/darwin_dyn_master.c
TARGET_FILES+=src/darwin_dyn_master_v2.c
TARGET_FILES+=src/stm32f1xx_hal_msp.c
TARGET_FILES+=src/motion_manager.c
TARGET_FILES+=src/action.c
......@@ -87,6 +88,7 @@ TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_spi.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal.c
TARGET_FILES+=$(USART_PATH)/src/usart3.c
TARGET_FILES+=$(USART_PATH)/src/usart2.c
TARGET_FILES+=$(USART_PATH)/src/usart1.c
DARWIN_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o))
......
......@@ -7,10 +7,10 @@ extern "C" {
#include "stm32f1xx.h"
#define ADC_NUM_CHANNELS 16
#define ADC_NUM_CHANNELS 12
typedef enum {ADC_CH1=0,ADC_CH2=1,ADC_CH3=2,ADC_CH4=3,ADC_CH5=4,ADC_CH6=5,ADC_CH7=6,ADC_CH8=7,
ADC_CH9=8,ADC_CH10=9,ADC_CH11=10,ADC_CH12=11,ADC_CH13=12,ADC_CH14=13,ADC_CH16=15,ADC_CH18=17} adc_ch_t;
ADC_CH9=8,ADC_CH10=9,ADC_CH12=10,ADC_CH14=11} adc_ch_t;
void adc_init(void);
void adc_start(void);
......
#ifndef _DARWIN_DYN_MASTER_V2_H
#define _DARWIN_DYN_MASTER_V2_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32f1xx.h"
#include "comm.h"
#include "dynamixel_master.h"
extern TDynamixelMaster darwin_dyn_master_v2;
void darwin_dyn_master_v2_init(void);
#ifdef __cplusplus
}
#endif
#endif
......@@ -218,22 +218,14 @@ typedef enum {
DARWIN_ADC_CH9_H = 0x0128,
DARWIN_ADC_CH10_L = 0x0129,
DARWIN_ADC_CH10_H = 0x012A,
DARWIN_ADC_CH11_L = 0x012B,
DARWIN_ADC_CH11_H = 0x012C,
DARWIN_ADC_TEMP_L = 0x012B,
DARWIN_ADC_TEMP_H = 0x012C,
DARWIN_ADC_CH12_L = 0x012D,
DARWIN_ADC_CH12_H = 0x012E,
DARWIN_ADC_CH13_L = 0x012F,
DARWIN_ADC_CH13_H = 0x0130,
DARWIN_ADC_VREF_L = 0x012F,
DARWIN_ADC_VREF_H = 0x0130,
DARWIN_ADC_CH14_L = 0x0131,
DARWIN_ADC_CH14_H = 0x0132,
DARWIN_ADC_TEMP_L = 0x0133,
DARWIN_ADC_TEMP_H = 0x0134,
DARWIN_ADC_CH16_L = 0x0135,
DARWIN_ADC_CH16_H = 0x0136,
DARWIN_ADC_VREF_L = 0x0137,
DARWIN_ADC_VREF_H = 0x0138,
DARWIN_ADC_CH18_L = 0x0139,
DARWIN_ADC_CH18_H = 0x013A,
DARWIN_IMU_CNTRL = 0x013B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
// accel_det | gyro_det | calibrating | running | | start_cal | stop | start
DARWIN_IMU_CAL_SAMPLES_L = 0x013C,
......@@ -568,7 +560,7 @@ typedef enum {
#define GPIO_BLUE_COLOR 0x7C00
#define ADC_BASE_ADDRESS 0x0115
#define ADC_MEM_LENGTH 38
#define ADC_MEM_LENGTH 30
#define ADC_START 0x01
#define ADC_STOP 0x02
#define ADC_RUNNING 0x10
......
......@@ -2,76 +2,60 @@
#include "ram.h"
#define ADC1_CH1 ADC_CHANNEL_0
#define ADC1_CH2 ADC_CHANNEL_1
#define ADC1_CH3 ADC_CHANNEL_2
#define ADC1_CH4 ADC_CHANNEL_3
#define ADC1_CH5 ADC_CHANNEL_4
#define ADC1_CH6 ADC_CHANNEL_5
#define ADC1_CH7 ADC_CHANNEL_6
#define ADC1_CH8 ADC_CHANNEL_TEMPSENSOR
#define ADC1_CH9 ADC_CHANNEL_VREFINT
#define ADC2_CH1 ADC_CHANNEL_7
#define ADC2_CH2 ADC_CHANNEL_8
#define ADC2_CH3 ADC_CHANNEL_9
#define ADC2_CH4 ADC_CHANNEL_10
#define ADC2_CH5 ADC_CHANNEL_11
#define ADC2_CH6 ADC_CHANNEL_12
#define ADC2_CH7 ADC_CHANNEL_13
#define ADC2_CH8 ADC_CHANNEL_14
#define ADC2_CH9 ADC_CHANNEL_15
#define ADC1_CH2 ADC_CHANNEL_5
#define ADC1_CH3 ADC_CHANNEL_6
#define ADC1_CH4 ADC_CHANNEL_7
#define ADC1_CH5 ADC_CHANNEL_8
#define ADC1_CH6 ADC_CHANNEL_TEMPSENSOR
#define ADC1_CH7 ADC_CHANNEL_VREFINT
#define ADC2_CH1 ADC_CHANNEL_9
#define ADC2_CH2 ADC_CHANNEL_10
#define ADC2_CH3 ADC_CHANNEL_11
#define ADC2_CH4 ADC_CHANNEL_12
#define ADC2_CH5 ADC_CHANNEL_13
#define ADC2_CH6 ADC_CHANNEL_14
#define ADC2_CH7 ADC_CHANNEL_15
#define ADC1_CH1_PIN GPIO_PIN_0
#define ADC1_CH1_PORT GPIOA
#define ADC1_CH1_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH2_PIN GPIO_PIN_1
#define ADC1_CH2_PIN GPIO_PIN_5
#define ADC1_CH2_PORT GPIOA
#define ADC1_CH2_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH3_PIN GPIO_PIN_2
#define ADC1_CH3_PIN GPIO_PIN_6
#define ADC1_CH3_PORT GPIOA
#define ADC1_CH3_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH4_PIN GPIO_PIN_3
#define ADC1_CH4_PIN GPIO_PIN_7
#define ADC1_CH4_PORT GPIOA
#define ADC1_CH4_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH5_PIN GPIO_PIN_4
#define ADC1_CH5_PORT GPIOA
#define ADC1_CH5_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH6_PIN GPIO_PIN_5
#define ADC1_CH6_PORT GPIOA
#define ADC1_CH6_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH7_PIN GPIO_PIN_6
#define ADC1_CH7_PORT GPIOA
#define ADC1_CH7_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH5_PIN GPIO_PIN_0
#define ADC1_CH5_PORT GPIOB
#define ADC1_CH5_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC1_ENABLE_CLK __ADC1_CLK_ENABLE()
#define ADC2_CH1_PIN GPIO_PIN_7
#define ADC2_CH1_PORT GPIOA
#define ADC2_CH1_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC2_CH1_PIN GPIO_PIN_1
#define ADC2_CH1_PORT GPIOB
#define ADC2_CH1_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC2_CH2_PIN GPIO_PIN_0
#define ADC2_CH2_PORT GPIOB
#define ADC2_CH2_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC2_CH2_PORT GPIOC
#define ADC2_CH2_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH3_PIN GPIO_PIN_1
#define ADC2_CH3_PORT GPIOB
#define ADC2_CH3_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC2_CH4_PIN GPIO_PIN_0
#define ADC2_CH3_PORT GPIOC
#define ADC2_CH3_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH4_PIN GPIO_PIN_2
#define ADC2_CH4_PORT GPIOC
#define ADC2_CH4_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH5_PIN GPIO_PIN_1
#define ADC2_CH5_PIN GPIO_PIN_3
#define ADC2_CH5_PORT GPIOC
#define ADC2_CH5_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH6_PIN GPIO_PIN_2
#define ADC2_CH6_PIN GPIO_PIN_4
#define ADC2_CH6_PORT GPIOC
#define ADC2_CH6_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH7_PIN GPIO_PIN_3
#define ADC2_CH7_PIN GPIO_PIN_5
#define ADC2_CH7_PORT GPIOC
#define ADC2_CH7_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH8_PIN GPIO_PIN_4
#define ADC2_CH8_PORT GPIOC
#define ADC2_CH8_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH9_PIN GPIO_PIN_5
#define ADC2_CH9_PORT GPIOC
#define ADC2_CH9_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_ENABLE_CLK __ADC2_CLK_ENABLE()
......@@ -169,9 +153,9 @@ void ADC_DMA_IRQHandler(void)
if(__HAL_DMA_GET_IT_SOURCE(&hdma_adc1, DMA_IT_TC) != RESET)
{
__HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));
for(i=0;i<9;i++)
for(i=0;i<7;i++)
{
if(i==7)
if(i==5)
{
value=adc_convert_temperature(adc_data[i]&0x0000FFFF);
ram_data[DARWIN_ADC_TEMP_L]=value%256;
......@@ -212,8 +196,6 @@ void adc_init(void)
ADC1_CH3_ENABLE_PORT_CLK;
ADC1_CH4_ENABLE_PORT_CLK;
ADC1_CH5_ENABLE_PORT_CLK;
ADC1_CH6_ENABLE_PORT_CLK;
ADC1_CH7_ENABLE_PORT_CLK;
ADC2_CH1_ENABLE_PORT_CLK;
ADC2_CH2_ENABLE_PORT_CLK;
ADC2_CH3_ENABLE_PORT_CLK;
......@@ -221,8 +203,6 @@ void adc_init(void)
ADC2_CH5_ENABLE_PORT_CLK;
ADC2_CH6_ENABLE_PORT_CLK;
ADC2_CH7_ENABLE_PORT_CLK;
ADC2_CH8_ENABLE_PORT_CLK;
ADC2_CH9_ENABLE_PORT_CLK;
ADC_ENABLE_DMA_CLK;
......@@ -234,7 +214,7 @@ void adc_init(void)
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 9;
hadc1.Init.NbrOfConversion = 7;
HAL_ADC_Init(&hadc1);
multimode.Mode = ADC_DUALMODE_REGSIMULT;
......@@ -270,20 +250,15 @@ void adc_init(void)
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH8;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH9;
sConfig.Rank = 9;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
// configure GPIO
GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN|
ADC1_CH5_PIN|ADC1_CH6_PIN|ADC1_CH7_PIN;
GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = ADC1_CH5_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
ADC2_ENABLE_CLK;
hadc2.Instance = ADC2;
hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
......@@ -291,7 +266,7 @@ void adc_init(void)
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;//ADC_EXTERNALTRIGCONV_T1_CC1;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.NbrOfConversion = 9;
hadc2.Init.NbrOfConversion = 7;
HAL_ADC_Init(&hadc2);
// configure ADC2 channels
......@@ -324,27 +299,15 @@ void adc_init(void)
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH8;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH9;
sConfig.Rank = 9;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
// configure GPIO
GPIO_InitStruct.Pin = ADC2_CH4_PIN|ADC2_CH5_PIN|ADC2_CH6_PIN|ADC2_CH7_PIN|
ADC2_CH8_PIN|ADC2_CH9_PIN;
GPIO_InitStruct.Pin = ADC2_CH2_PIN|ADC2_CH3_PIN|ADC2_CH4_PIN|ADC2_CH5_PIN|
ADC2_CH6_PIN|ADC2_CH7_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = ADC2_CH2_PIN|ADC2_CH3_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = ADC2_CH1_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
//initialize DMA
hdma_adc1.Instance = ADC_DMA_CHANNEL;
......@@ -403,7 +366,7 @@ void adc_init(void)
HAL_ADCEx_Calibration_Start(&hadc2);
HAL_ADC_Start(&hadc2);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,9);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,7);
}
void adc_start(void)
......@@ -461,18 +424,10 @@ uint16_t adc_get_channel(adc_ch_t channel)
break;
case ADC_CH10: value=ram_data[DARWIN_ADC_CH10_L]+ram_data[DARWIN_ADC_CH10_H]*256;
break;
case ADC_CH11: value=ram_data[DARWIN_ADC_CH11_L]+ram_data[DARWIN_ADC_CH11_H]*256;
break;
case ADC_CH12: value=ram_data[DARWIN_ADC_CH12_L]+ram_data[DARWIN_ADC_CH12_H]*256;
break;
case ADC_CH13: value=ram_data[DARWIN_ADC_CH13_L]+ram_data[DARWIN_ADC_CH13_H]*256;
break;
case ADC_CH14: value=ram_data[DARWIN_ADC_CH14_L]+ram_data[DARWIN_ADC_CH14_H]*256;
break;
case ADC_CH16: value=ram_data[DARWIN_ADC_CH16_L]+ram_data[DARWIN_ADC_CH16_H]*256;
break;
case ADC_CH18: value=ram_data[DARWIN_ADC_CH18_L]+ram_data[DARWIN_ADC_CH18_H]*256;
break;
default: value=0x0000;
}
......@@ -505,18 +460,10 @@ uint16_t adc_get_channel_raw(adc_ch_t channel)
break;
case ADC_CH10: value=(adc_data[4]&0xFFFF0000)>>16;
break;
case ADC_CH11: value=adc_data[5]&0x0000FFFF;
break;
case ADC_CH12: value=(adc_data[5]&0xFFFF0000)>>16;
break;
case ADC_CH13: value=adc_data[6]&0x0000FFFF;
break;
case ADC_CH14: value=(adc_data[6]&0xFFFF0000)>>16;
break;
case ADC_CH16: value=(adc_data[7]&0xFFFF0000)>>16;
break;
case ADC_CH18: value=(adc_data[8]&0xFFFF0000)>>16;
break;
default: value=0x0000;
}
......
#include "darwin_dyn_master_v2.h"
#include "darwin_time.h"
#include "usart2.h"
#include "ram.h"
#define ENABLE_RX_EN_GPIO_CLK __GPIOA_CLK_ENABLE()
#define RX_EN_PIN GPIO_PIN_4
#define RX_EN_GPIO_PORT GPIOA
#define ENABLE_TX_EN_GPIO_CLK __GPIOA_CLK_ENABLE()
#define TX_EN_PIN GPIO_PIN_1
#define TX_EN_GPIO_PORT GPIOA
/* private variables */
TDynamixelMaster darwin_dyn_master_v2;
TTime darwin_dyn_master_v2_timer;
TComm darwin_dyn_master_v2_comm;
// private functions
void darwin_dyn_master_v2_set_rx_mode(void)
{
HAL_GPIO_WritePin(TX_EN_GPIO_PORT,TX_EN_PIN,GPIO_PIN_RESET);
HAL_GPIO_WritePin(RX_EN_GPIO_PORT,RX_EN_PIN,GPIO_PIN_SET);
}
void darwin_dyn_master_v2_set_tx_mode(void)
{
HAL_GPIO_WritePin(RX_EN_GPIO_PORT,RX_EN_PIN,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TX_EN_GPIO_PORT,TX_EN_PIN,GPIO_PIN_SET);
}
// public functions
void darwin_dyn_master_v2_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TUSART_IRQ_Priorities priorities;
UART_InitTypeDef Init;
// initialize timer structure
time_init(&darwin_dyn_master_v2_timer,darwin_time_get_counts_per_us(),darwin_time_get_counts);
// initialize GPIO
ENABLE_RX_EN_GPIO_CLK;
ENABLE_TX_EN_GPIO_CLK;
GPIO_InitStructure.Pin = RX_EN_PIN;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(RX_EN_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = TX_EN_PIN;
HAL_GPIO_Init(TX_EN_GPIO_PORT, &GPIO_InitStructure);
darwin_dyn_master_v2_set_rx_mode();
/* initialize the comm object */
comm_init(&darwin_dyn_master_v2_comm,0x01,&darwin_dyn_master_v2_timer);
Init.BaudRate = 1000000;
Init.WordLength = UART_WORDLENGTH_8B;
Init.StopBits = UART_STOPBITS_1;
Init.Parity = UART_PARITY_NONE;
Init.Mode = UART_MODE_TX_RX;
Init.HwFlowCtl = UART_HWCONTROL_NONE;
Init.OverSampling = UART_OVERSAMPLING_16;
priorities.irq_priority=0;
priorities.irq_subpriority=2;
priorities.dma_rx_priority=1;
priorities.dma_rx_subpriority=1;
priorities.dma_tx_priority=1;
priorities.dma_tx_subpriority=0;
usart2_init(&darwin_dyn_master_v2_comm,&Init,&priorities);
dyn_master_init(&darwin_dyn_master_v2,&darwin_dyn_master_v2_comm,DYN_VER2);
darwin_dyn_master_v2.set_rx_mode=darwin_dyn_master_v2_set_rx_mode;
darwin_dyn_master_v2.set_tx_mode=darwin_dyn_master_v2_set_tx_mode;
/* configure dynamixel master module */
dyn_master_set_rx_timeout(&darwin_dyn_master_v2,50);
dyn_master_set_return_level(&darwin_dyn_master_v2,return_all);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment