added twincat plotting

This commit is contained in:
Nicolas Trimborn 2021-08-24 11:38:13 +02:00
parent 1230e96c1f
commit 58bba21ef3
14 changed files with 2570 additions and 811 deletions

View File

@ -65,12 +65,15 @@ void initialize_ads()
/* Write Config Registers */
ADS1299_WREG(CONFIG1,0x94); // Set Config 1 Register
ADS1299_WREG(CONFIG2,0xC0); // Set Config 2 Register
//ADS1299_WREG(CONFIG2,0xC0); // Set Config 2 Register - Standard
ADS1299_WREG(CONFIG2,0xD4); // Set Config 2 Register - internal test signal, pulsed
//ADS1299_WREG(CONFIG2,0xD7); // Set Config 2 Register - internal test signal, DC
ADS1299_WREG(CONFIG3,0xEC); // Set Config 3 Register
ADS1299_WREG(LOFF,0x02); // Set LOFF Register
for(uint8_t i=CH1SET; i<=CH4SET; i++) // set up to modify the 4 channel setting registers
{
ADS1299.regData[i] = 0x68; // the regData array mirrors the ADS1299 register addresses
ADS1299.regData[i] = 0x68; // the regData array mirrors the ADS1299 register addresses
//ADS1299.regData[i] = 0x6D; // Test signal
}
ADS1299_WREGS(CH1SET,3); // write new channel settings
ADS1299_WREG(BIAS_SENSP,0xFF); // Set BIAS_SENSP Register

View File

@ -81,18 +81,18 @@ void enable_NVIC_IRQ(void)
NVIC_EnableIRQ(DMAC_0_IRQn);
NVIC_EnableIRQ(DMAC_1_IRQn);
NVIC_SetPriority(DMAC_0_IRQn, 1);
NVIC_SetPriority(ADC1_0_IRQn, 3);
NVIC_SetPriority(ADC1_0_IRQn, 2);
NVIC_EnableIRQ(TCC0_0_IRQn);
NVIC_EnableIRQ(TCC1_0_IRQn);
NVIC_EnableIRQ(EIC_2_IRQn);
NVIC_SetPriority(EIC_2_IRQn, 3);
//NVIC_SetPriority(EIC_2_IRQn, 3);
//NVIC_SetPriority(TCC0_0_IRQn, 3);
//NVIC_EnableIRQ(EIC_5_IRQn);
}
void APPLICATION_StateMachine(void)
{
Motor1.timerflags.current_loop_tic = false;
//Motor1.timerflags.current_loop_tic = false;
if (applicationStatus.fault)
{
@ -177,10 +177,11 @@ int main(void)
angle_sensor_init();
initialize_ads();
/* External IRQ Config */
ext_irq_register(GPIO_PIN(ADS_DATA_RDY), ADS1299_dataReadyISR);
enable_NVIC_IRQ();
__enable_irq();
//ADS1299_START();
enable_NVIC_IRQ();
ext_irq_register(GPIO_PIN(ADS_DATA_RDY), ADS1299_dataReadyISR);
ADS1299_START();
/* Replace with your application code */
while (1) {
@ -195,10 +196,10 @@ int main(void)
//_dma_enable_transaction(DMAC_CHANNEL_CONF_SERCOM_1_RECEIVE, false);
//_dma_enable_transaction(DMAC_CHANNEL_CONF_SERCOM_1_TRANSMIT, false);
//int16_t* angles;
//angles = read_angle();
//Motor1.motor_status.abs_position = degrees(angles[0]);
//Motor2.motor_status.abs_position = degrees(angles[1]);
int16_t* angles;
angles = read_angle();
Motor1.motor_status.abs_position = degrees(angles[0]);
Motor2.motor_status.abs_position = degrees(angles[1]);
////field = ang_sense_read(AS_CMD_MAGNITUDE);
//*Spare1_tx = (field[0] & AS_MASK);
@ -210,6 +211,7 @@ int main(void)
}
if (Motor1.timerflags.current_loop_tic) {
Motor1.timerflags.current_loop_tic = false;
APPLICATION_StateMachine();
exec_commutation(&Motor1);
exec_commutation(&Motor2);
@ -217,7 +219,7 @@ int main(void)
if (ADS1299.data_ReadyFlag){
ADS1299.data_ReadyFlag = false;
//ADS1299_UPDATECHANNELDATA();
ADS1299_UPDATECHANNELDATA();
}
if (run_ECAT) {ECAT_STATE_MACHINE();}

View File

@ -232,14 +232,14 @@ int main(void)
custom_logic_enable();
enable_NVIC_IRQ();
//DMAC->Channel[0].CHCTRLA.reg |= DMAC_CHCTRLA_ENABLE;
//DMAC->Channel[1].CHCTRLA.reg |= DMAC_CHCTRLA_ENABLE;
_dma_enable_transaction(CONF_SERCOM_1_RECEIVE_DMA_CHANNEL, false);
_dma_enable_transaction(CONF_SERCOM_1_TRANSMIT_DMA_CHANNEL, false);
DMAC->Channel[0].CHCTRLA.reg |= DMAC_CHCTRLA_ENABLE;
DMAC->Channel[1].CHCTRLA.reg |= DMAC_CHCTRLA_ENABLE;
//_dma_enable_transaction(CONF_SERCOM_1_RECEIVE_DMA_CHANNEL, false);
//_dma_enable_transaction(CONF_SERCOM_1_TRANSMIT_DMA_CHANNEL, false);
//as5048a_init(&SPI_3, &AS_1);
ORIENTATION_SENSOR_0_init();
//ORIENTATION_SENSOR_0_init();
angle_sensor_init();

1
Examples/ADS129X Submodule

@ -0,0 +1 @@
Subproject commit e4bd32c5feec9d23b34b92f015dbf176bbbeafe5

View File

@ -5,8 +5,9 @@
</ImageDatas>
<Project ProjectGUID="{627AF960-8AD6-492C-BE55-42F15976A40C}" Target64Bit="true" ShowHideConfigurations="#x106">
<System>
<Settings DontCheckTarget="192.168.61.1.1.1"/>
<Tasks>
<Task Id="3" Priority="20" CycleTime="100000" AmsPort="350" AdtTasks="true">
<Task Id="3" Priority="20" CycleTime="10000" AmsPort="350" AdtTasks="true">
<Name>PlcTask</Name>
</Task>
</Tasks>
@ -113,39 +114,6 @@
<Name>GVL_motor_data.M2_Motor_dutyCycle</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH1</Name>
<Comment><![CDATA[ EMG //]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH2</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH3</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH4</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH5</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH6</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH7</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH8</Name>
<Type>INT</Type>
</Var>
<Var>
<Name>GVL_motor_data.M3_Mode</Name>
<Type>BYTE</Type>
@ -155,6 +123,23 @@
<Comment><![CDATA[ Motor 4//]]></Comment>
<Type>BYTE</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH1</Name>
<Comment><![CDATA[ EMG //]]></Comment>
<Type>DINT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH2</Name>
<Type>DINT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH3</Name>
<Type>DINT</Type>
</Var>
<Var>
<Name>GVL_motor_data.EMG_CH4</Name>
<Type>DINT</Type>
</Var>
<Var>
<Name>GVL_motor_data.M3_Joint_rel_position</Name>
<Type>INT</Type>
@ -443,7 +428,7 @@ QSPI_rx_buffer
<OTCID>#x02010030</OTCID>
</ManualConfig>
<Priority>20</Priority>
<CycleTime>10000000</CycleTime>
<CycleTime>1000000</CycleTime>
</Context>
</Contexts>
<TaskPouOids>
@ -453,28 +438,28 @@ QSPI_rx_buffer
</Project>
</Plc>
<Io>
<Device Id="2" DevType="111" DevFlags="#x0003" AmsPort="28674" AmsNetId="10.183.82.252.3.1" RemoteName="Device 2 (EtherCAT)">
<Device Id="2" DevType="111" DevFlags="#x0003" AmsPort="28674" AmsNetId="192.168.61.1.3.1" RemoteName="Device 2 (EtherCAT)">
<Name>Device 2 (EtherCAT)</Name>
<AddressInfo>
<Pnp>
<DeviceDesc>Ethernet (Realtek PCIe GbE Family Controller)</DeviceDesc>
<DeviceName>\DEVICE\{7A5E866B-9C27-4C9A-AB1A-3FD2FE6A43CC}</DeviceName>
<DeviceData>b025aa33135b</DeviceData>
<DeviceDesc>Ethernet (TwinCAT-Intel PCI Ethernet Adapter (Gigab</DeviceDesc>
<DeviceName>\DEVICE\{B319FB6B-ED15-445B-9318-290BECEEFA76}</DeviceName>
<DeviceData>4c5262a1d9ac</DeviceData>
</Pnp>
</AddressInfo>
<Image Id="1" AddrType="9" ImageType="3">
<Name>Image</Name>
</Image>
<Box Id="2" BoxType="9099">
<Name>Box 2 (LAN9252-2_motor_Master)</Name>
<Box Id="1" BoxType="9099">
<Name>Box 1 (LAN9252-2_motor_Master)</Name>
<ImageId>1000</ImageId>
<EtherCAT SlaveType="1" PdiType="#x3180" CycleMBoxPollingTime="0" VendorId="#x000004d8" ProductCode="#x00000002" RevisionNo="#x00000006" PortPhys="17" IdentificationAdo="18" MaxSlotCount="256" MaxSlotGroupCount="1" SlotPdoIncrement="1" SlotIndexIncrement="16" Type="MSRM 2_motor_Master Ethercat Slave" Desc="LAN9252-2_motor_Master" PortABoxInfo="#x00ffffff">
<EtherCAT SlaveType="1" PdiType="#x3180" CycleMBoxPollingTime="0" VendorId="#x000004d8" ProductCode="#x00000002" RevisionNo="#x00000007" PortPhys="17" IdentificationAdo="18" MaxSlotCount="256" MaxSlotGroupCount="1" SlotPdoIncrement="1" SlotIndexIncrement="16" Type="MSRM 2_motor_Master Ethercat Slave" Desc="LAN9252-2_motor_Master" PortABoxInfo="#x00ffffff">
<SyncMan>001160000400010003000000000000000000001104010000</SyncMan>
<SyncMan>001880000000010004000000000000000000001800010000</SyncMan>
<Fmmu>0000000000000000001100020100000001000000000000000000000000000000</Fmmu>
<Fmmu>0000000000000000001800010100000002000000000000000000000000000000</Fmmu>
<Pdo Name="MCU2ECAT" Index="#x1600" Flags="#x0010" SyncMan="1">
<Entry Name="M1__status" Index="#x3001" Sub="#x01" Flags="#x00008020">
<Entry Name="M1__status" Index="#x3001" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M1__mode" Index="#x3002" Sub="#x01">
@ -541,152 +526,140 @@ QSPI_rx_buffer
<Type>INT</Type>
</Entry>
<Entry Name="EMG__CH1" Index="#x3017" Sub="#x01">
<Type>INT</Type>
<Type>DINT</Type>
</Entry>
<Entry Name="EMG__CH2" Index="#x3018" Sub="#x01">
<Type>INT</Type>
<Type>DINT</Type>
</Entry>
<Entry Name="EMG__CH3" Index="#x3019" Sub="#x01">
<Type>INT</Type>
<Type>DINT</Type>
</Entry>
<Entry Name="EMG__CH4" Index="#x301a" Sub="#x01">
<Type>DINT</Type>
</Entry>
<Entry Name="SPARE__1_TX" Index="#x301b" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="EMG__CH5" Index="#x301b" Sub="#x01">
<Entry Name="SPARE__2_TX" Index="#x301c" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="EMG__CH6" Index="#x301c" Sub="#x01">
<Entry Name="SPARE__3_TX" Index="#x301d" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="EMG__CH7" Index="#x301d" Sub="#x01">
<Entry Name="SPARE__4_TX" Index="#x301e" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="EMG__CH8" Index="#x301e" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="SPARE__1_TX" Index="#x301f" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="SPARE__2_TX" Index="#x3020" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="SPARE__3_TX" Index="#x3021" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="SPARE__4_TX" Index="#x3022" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__status" Index="#x3023" Sub="#x01">
<Entry Name="M3__status" Index="#x301f" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M3__mode" Index="#x3024" Sub="#x01">
<Entry Name="M3__mode" Index="#x3020" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M3__Joint__rel_position" Index="#x3025" Sub="#x01">
<Entry Name="M3__Joint__rel_position" Index="#x3021" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Joint_abs_position" Index="#x3026" Sub="#x01">
<Entry Name="M3__Joint_abs_position" Index="#x3022" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_speed" Index="#x3027" Sub="#x01">
<Entry Name="M3__Motor_speed" Index="#x3023" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_current_bus" Index="#x3028" Sub="#x01">
<Entry Name="M3__Motor_current_bus" Index="#x3024" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_currentPhA" Index="#x3029" Sub="#x01">
<Entry Name="M3__Motor_currentPhA" Index="#x3025" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_currentPhB" Index="#x302a" Sub="#x01">
<Entry Name="M3__Motor_currentPhB" Index="#x3026" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_currentPhC" Index="#x302b" Sub="#x01">
<Entry Name="M3__Motor_currentPhC" Index="#x3027" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_hallState" Index="#x302c" Sub="#x01">
<Entry Name="M3__Motor_hallState" Index="#x3028" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M3__Motor_dutyCycle" Index="#x302d" Sub="#x01">
<Entry Name="M3__Motor_dutyCycle" Index="#x3029" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__status" Index="#x302e" Sub="#x01">
<Entry Name="M4__status" Index="#x302a" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M4__mode" Index="#x302f" Sub="#x01">
<Entry Name="M4__mode" Index="#x302b" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M4__Joint__rel_position" Index="#x3030" Sub="#x01">
<Entry Name="M4__Joint__rel_position" Index="#x302c" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Joint_abs_position" Index="#x3031" Sub="#x01">
<Entry Name="M4__Joint_abs_position" Index="#x302d" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_speed" Index="#x3032" Sub="#x01">
<Entry Name="M4__Motor_speed" Index="#x302e" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_current_bus" Index="#x3033" Sub="#x01">
<Entry Name="M4__Motor_current_bus" Index="#x302f" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_currentPhA" Index="#x3034" Sub="#x01">
<Entry Name="M4__Motor_currentPhA" Index="#x3030" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_currentPhB" Index="#x3035" Sub="#x01">
<Entry Name="M4__Motor_currentPhB" Index="#x3031" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_currentPhC" Index="#x3036" Sub="#x01">
<Entry Name="M4__Motor_currentPhC" Index="#x3032" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_hallState" Index="#x3037" Sub="#x01">
<Entry Name="M4__Motor_hallState" Index="#x3033" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M4__Motor_dutyCycle" Index="#x3038" Sub="#x01">
<Entry Name="M4__Motor_dutyCycle" Index="#x3034" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="IMU__q_x0" Index="#x3039" Sub="#x01">
<Entry Name="IMU__q_x0" Index="#x3035" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="IMU__q_y0" Index="#x303a" Sub="#x01">
<Entry Name="IMU__q_y0" Index="#x3036" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="IMU__q_z0" Index="#x303b" Sub="#x01">
<Entry Name="IMU__q_z0" Index="#x3037" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="IMU__q_w0" Index="#x303c" Sub="#x01">
<Entry Name="IMU__q_w0" Index="#x3038" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="FSR__CH1" Index="#x303d" Sub="#x01">
<Entry Name="FSR__CH1" Index="#x3039" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="FSR__CH2" Index="#x303e" Sub="#x01">
<Entry Name="FSR__CH2" Index="#x303a" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="FSR__CH3" Index="#x303f" Sub="#x01">
<Entry Name="FSR__CH3" Index="#x303b" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="FSR__CH4" Index="#x3040" Sub="#x01">
<Entry Name="FSR__CH4" Index="#x303c" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="FSR__CH5" Index="#x3041" Sub="#x01">
<Entry Name="FSR__CH5" Index="#x303d" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="Pressure__CH1" Index="#x3042" Sub="#x01">
<Entry Name="Pressure__CH1" Index="#x303e" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="Pressure__CH2" Index="#x3043" Sub="#x01">
<Entry Name="Pressure__CH2" Index="#x303f" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="Pressure__CH3" Index="#x3044" Sub="#x01">
<Entry Name="Pressure__CH3" Index="#x3040" Sub="#x01">
<Type>INT</Type>
</Entry>
</Pdo>
<Pdo Name="ECAT2MCU" Index="#x1a00" InOut="1" Flags="#x0010" SyncMan="0">
<Entry Name="M1__control_mode" Index="#x3101" Sub="#x01" Flags="#x00008020">
<Entry Name="M1__control_mode" Index="#x3101" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M1__control_set" Index="#x3102" Sub="#x01" Flags="#x00008020">
<Entry Name="M1__control_set" Index="#x3102" Sub="#x01">
<Type>BYTE</Type>
</Entry>
<Entry Name="M1__desired_position" Index="#x3103" Sub="#x01" Flags="#x00008020">
<Entry Name="M1__desired_position" Index="#x3103" Sub="#x01">
<Type>INT</Type>
</Entry>
<Entry Name="M1__desired_speed" Index="#x3104" Sub="#x01">
@ -843,4 +816,102 @@ QSPI_rx_buffer
</Device>
</Io>
</Project>
<Mappings>
<MappingInfo Identifier="{00000000-2001-0850-0020-500810000403}" Id="#x02030010"/>
<OwnerA Name="TIPC^Motordata_PLC^Motordata_PLC Instance">
<OwnerB Name="TIID^Device 2 (EtherCAT)^Box 1 (LAN9252-2_motor_Master)">
<Link VarA="PlcTask Inputs^GVL_motor_data.EMG_CH1" VarB="MCU2ECAT^EMG^CH1"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.EMG_CH2" VarB="MCU2ECAT^EMG^CH2"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.EMG_CH3" VarB="MCU2ECAT^EMG^CH3"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.EMG_CH4" VarB="MCU2ECAT^EMG^CH4"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Joint_abs_position" VarB="MCU2ECAT^M1^Joint_abs_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Joint_rel_position" VarB="MCU2ECAT^M1^Joint_rel_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Mode" VarB="MCU2ECAT^M1^mode"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_HallState" VarB="MCU2ECAT^M1^Motor_hallState"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_currentPhA" VarB="MCU2ECAT^M1^Motor_currentPhA"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_currentPhB" VarB="MCU2ECAT^M1^Motor_currentPhB"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_currentPhC" VarB="MCU2ECAT^M1^Motor_currentPhC"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_current_bus" VarB="MCU2ECAT^M1^Motor_current_bus"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_dutyCycle" VarB="MCU2ECAT^M1^Motor_dutyCycle"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Motor_speed" VarB="MCU2ECAT^M1^Motor_speed"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M1_Status" VarB="MCU2ECAT^M1^status"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Joint_abs_position" VarB="MCU2ECAT^M2^Joint_abs_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Joint_rel_position" VarB="MCU2ECAT^M2^Joint__rel_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Mode" VarB="MCU2ECAT^M2^mode"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_HallState" VarB="MCU2ECAT^M2^Motor_hallState"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_currentPhA" VarB="MCU2ECAT^M2^Motor_currentPhA"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_currentPhB" VarB="MCU2ECAT^M2^Motor_currentPhB"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_currentPhC" VarB="MCU2ECAT^M2^Motor_currentPhC"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_current_bus" VarB="MCU2ECAT^M2^Motor_current_bus"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_dutyCycle" VarB="MCU2ECAT^M2^Motor_dutyCycle"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Motor_speed" VarB="MCU2ECAT^M2^Motor_speed"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M2_Status" VarB="MCU2ECAT^M2^status"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Joint_abs_position" VarB="MCU2ECAT^M3^Joint_abs_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Joint_rel_position" VarB="MCU2ECAT^M3^Joint__rel_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Mode" VarB="MCU2ECAT^M3^mode"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_HallState" VarB="MCU2ECAT^M3^Motor_hallState"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_currentPhA" VarB="MCU2ECAT^M3^Motor_currentPhA"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_currentPhB" VarB="MCU2ECAT^M3^Motor_currentPhB"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_currentPhC" VarB="MCU2ECAT^M3^Motor_currentPhC"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_current_bus" VarB="MCU2ECAT^M3^Motor_current_bus"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_dutyCycle" VarB="MCU2ECAT^M3^Motor_dutyCycle"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Motor_speed" VarB="MCU2ECAT^M3^Motor_speed"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M3_Status" VarB="MCU2ECAT^M3^status"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Joint_abs_position" VarB="MCU2ECAT^M4^Joint_abs_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Joint_rel_position" VarB="MCU2ECAT^M4^Joint__rel_position"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Mode" VarB="MCU2ECAT^M4^mode"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_HallState" VarB="MCU2ECAT^M4^Motor_hallState"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_currentPhA" VarB="MCU2ECAT^M4^Motor_currentPhA"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_currentPhB" VarB="MCU2ECAT^M4^Motor_currentPhB"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_currentPhC" VarB="MCU2ECAT^M4^Motor_currentPhC"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_current_bus" VarB="MCU2ECAT^M4^Motor_current_bus"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_dutyCycle" VarB="MCU2ECAT^M4^Motor_dutyCycle"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Motor_speed" VarB="MCU2ECAT^M4^Motor_speed"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.M4_Status" VarB="MCU2ECAT^M4^status"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.Pressure_CH1" VarB="MCU2ECAT^Pressure^CH1"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.Pressure_CH2" VarB="MCU2ECAT^Pressure^CH2"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.Pressure_CH3" VarB="MCU2ECAT^Pressure^CH3"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.q_w0" VarB="MCU2ECAT^IMU^q_w0"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.q_x0" VarB="MCU2ECAT^IMU^q_x0"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.q_y0" VarB="MCU2ECAT^IMU^q_y0"/>
<Link VarA="PlcTask Inputs^GVL_motor_data.q_z0" VarB="MCU2ECAT^IMU^q_z0"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Control_mode" VarB="ECAT2MCU^M1^control_mode"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Control_set" VarB="ECAT2MCU^M1^control_set"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Desired_current" VarB="ECAT2MCU^M1^desired__current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Desired_dc" VarB="ECAT2MCU^M1^Spare"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Desired_pos" VarB="ECAT2MCU^M1^desired_position"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Desired_speed" VarB="ECAT2MCU^M1^desired_speed"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Max_current" VarB="ECAT2MCU^M1^Max_current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Max_pos" VarB="ECAT2MCU^M1^Max_Pos"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M1_Max_velocity" VarB="ECAT2MCU^M1^Max_velocity"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Control_mode" VarB="ECAT2MCU^M2^control_mode"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Control_set" VarB="ECAT2MCU^M2^control_set"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Desired_current" VarB="ECAT2MCU^M2^desired__current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Desired_dc" VarB="ECAT2MCU^M2^Spare"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Desired_pos" VarB="ECAT2MCU^M2^desired_position"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Desired_speed" VarB="ECAT2MCU^M2^desired_speed"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Max_current" VarB="ECAT2MCU^M2^Max_current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Max_pos" VarB="ECAT2MCU^M2^Max_Pos"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M2_Max_velocity" VarB="ECAT2MCU^M2^Max_velocity"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Control_mode" VarB="ECAT2MCU^M3^control_mode"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Control_set" VarB="ECAT2MCU^M3^control_set"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Desired_current" VarB="ECAT2MCU^M3^desired__current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Desired_dc" VarB="ECAT2MCU^M3^Spare"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Desired_pos" VarB="ECAT2MCU^M3^desired_position"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Desired_speed" VarB="ECAT2MCU^M3^desired_speed"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Max_current" VarB="ECAT2MCU^M3^Max_current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Max_pos" VarB="ECAT2MCU^M3^Max_Pos"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M3_Max_velocity" VarB="ECAT2MCU^M3^Max_velocity"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Control_mode" VarB="ECAT2MCU^M4^control_mode"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Control_set" VarB="ECAT2MCU^M4^control_set"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Desired_current" VarB="ECAT2MCU^M4^desired__current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Desired_dc" VarB="ECAT2MCU^M4^Spare"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Desired_pos" VarB="ECAT2MCU^M4^desired_position"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Desired_speed" VarB="ECAT2MCU^M4^desired_speed"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Max_current" VarB="ECAT2MCU^M4^Max_current"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Max_pos" VarB="ECAT2MCU^M4^Max_Pos"/>
<Link VarA="PlcTask Outputs^GVL_motor_data.M4_Max_velocity" VarB="ECAT2MCU^M4^Max_velocity"/>
</OwnerB>
</OwnerA>
</Mappings>
</TcSmProject>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.5">
<GVL Name="GVL_EMG" Id="{8fb1d95a-ab1e-4b7a-821f-bc8f80b840ed}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
EMG_CH1_uV : REAL;
EMG_CH2_uV : REAL;
EMG_CH3_uV : REAL;
EMG_CH4_uV : REAL;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.6">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.5">
<GVL Name="GVL_motor_data" Id="{f1f9826e-bbc5-4781-8d1a-d97243969113}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
@ -30,14 +30,10 @@ M2_Motor_HallState AT %I* : INT;
M2_Motor_dutyCycle AT %I* : INT;
// EMG //
EMG_CH1 AT %I* : INT;
EMG_CH2 AT %I* : INT;
EMG_CH3 AT %I* : INT;
EMG_CH4 AT %I* : INT;
EMG_CH5 AT %I* : INT;
EMG_CH6 AT %I* : INT;
EMG_CH7 AT %I* : INT;
EMG_CH8 AT %I* : INT;
EMG_CH1 AT %I* : DINT;
EMG_CH2 AT %I* : DINT;
EMG_CH3 AT %I* : DINT;
EMG_CH4 AT %I* : DINT;
// Motor 3 //
M3_Status AT %I* : BYTE;

View File

@ -17,6 +17,10 @@
<LibraryReferences>{7999646c-51c9-45ae-9085-f34e5ecc5ec7}</LibraryReferences>
</PropertyGroup>
<ItemGroup>
<Compile Include="GVLs\GVL_EMG.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="GVLs\GVL_motor_data.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>

View File

@ -1,14 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.6">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.5">
<POU Name="MAIN" Id="{bea1ccef-eacb-4a24-8635-6fbb784e4a5d}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM MAIN
VAR
Scalefactor : REAL := 0.02235;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[POU_Position_Seq();]]></ST>
<ST><![CDATA[
GVL_EMG.EMG_CH1_uV := DINT_TO_REAL(GVL_motor_data.EMG_CH1) * Scalefactor;
GVL_EMG.EMG_CH2_uV := DINT_TO_REAL(GVL_motor_data.EMG_CH2) * Scalefactor;
GVL_EMG.EMG_CH3_uV := DINT_TO_REAL(GVL_motor_data.EMG_CH3) * Scalefactor;
GVL_EMG.EMG_CH4_uV := DINT_TO_REAL(GVL_motor_data.EMG_CH4) * Scalefactor;
POU_Position_Seq();]]></ST>
</Implementation>
<LineIds Name="MAIN">
<LineId Id="6" Count="1" />
<LineId Id="10" Count="3" />
<LineId Id="2" Count="0" />
</LineIds>
</POU>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.6">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.5">
<POU Name="POU_Position_Seq" Id="{2042500d-93f5-4691-917f-6cc51b024d44}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM POU_Position_Seq
VAR
@ -321,7 +321,7 @@ END_VAR
<o>
<v n="AttributeId">{38391c6d-6d4a-42f8-8ee7-9f45e5adafa8}</v>
<o n="Value" t="StringValue">
<v n="Value">"POS_1.t &gt; T#6s"</v>
<v n="Value">"POS_1.t &gt; T#3s"</v>
<v n="DefaultValue">""</v>
</o>
<v n="Id">80L</v>
@ -504,7 +504,7 @@ END_VAR
<o>
<v n="AttributeId">{38391c6d-6d4a-42f8-8ee7-9f45e5adafa8}</v>
<o n="Value" t="StringValue">
<v n="Value">"POS_2.t &gt; T#6s"</v>
<v n="Value">"POS_2.t &gt; T#3s"</v>
<v n="DefaultValue">""</v>
</o>
<v n="Id">125L</v>
@ -687,7 +687,7 @@ END_VAR
<o>
<v n="AttributeId">{38391c6d-6d4a-42f8-8ee7-9f45e5adafa8}</v>
<o n="Value" t="StringValue">
<v n="Value">"POS_3.t &gt; T#6s"</v>
<v n="Value">"POS_3.t &gt; T#3s"</v>
<v n="DefaultValue">""</v>
</o>
<v n="Id">49L</v>
@ -781,7 +781,35 @@ END_VAR
</o>
</l2>
</o>
<l2 n="Attributes" />
<l2 n="Attributes" cet="SFCAttribute">
<o>
<v n="AttributeId">{38391c6d-6d4a-42f8-8ee7-9f45e5adafa8}</v>
<o n="Value" t="StringValue">
<v n="Value">""</v>
<v n="DefaultValue">""</v>
</o>
<v n="Id">143L</v>
<v n="IdParent">5L</v>
</o>
<o>
<v n="AttributeId">{7d894980-aeea-405c-a0f6-e2b26429c58f}</v>
<o n="Value" t="StringValue">
<v n="Value">""</v>
<v n="DefaultValue">""</v>
</o>
<v n="Id">144L</v>
<v n="IdParent">5L</v>
</o>
<o>
<v n="AttributeId">{01580b27-6378-448b-8ecb-0e4b795b58d6}</v>
<o n="Value" t="BoolValue">
<v n="Value">"FALSE"</v>
<v n="DefaultValue">"FALSE"</v>
</o>
<v n="Id">145L</v>
<v n="IdParent">5L</v>
</o>
</l2>
<v n="Id">5L</v>
<v n="IdParent">-1L</v>
</o>
@ -1073,7 +1101,7 @@ END_VAR
</Implementation>
<Action Name="_aPOS_1_entry" Id="{0ae03264-b28c-44bd-9cfc-1102ae68301e}">
<Implementation>
<ST><![CDATA[GVL_motor_data.M1_Desired_pos := 800;
<ST><![CDATA[GVL_motor_data.M1_Desired_pos := 1000;
GVL_motor_data.M2_Desired_pos := 1000;]]></ST>
</Implementation>
<ObjectProperties>
@ -1092,8 +1120,8 @@ GVL_motor_data.M2_Desired_pos := 1000;]]></ST>
</Action>
<Action Name="_aPOS_2_entry" Id="{61315308-5bec-490a-a6bc-fde3430a9e9d}">
<Implementation>
<ST><![CDATA[GVL_motor_data.M1_Desired_pos := -200;
GVL_motor_data.M2_Desired_pos := -110;]]></ST>
<ST><![CDATA[GVL_motor_data.M1_Desired_pos := -500;
GVL_motor_data.M2_Desired_pos := -500;]]></ST>
</Implementation>
<ObjectProperties>
<XmlArchive>
@ -1224,8 +1252,8 @@ GVL_motor_data.M2_Desired_pos := 0;]]></ST>
</XmlArchive>
</ObjectProperties>
<LineIds Name="POU_Position_Seq._aPOS_1_entry">
<LineId Id="4" Count="0" />
<LineId Id="2" Count="0" />
<LineId Id="1" Count="0" />
</LineIds>
<LineIds Name="POU_Position_Seq._aPOS_2_entry">
<LineId Id="2" Count="0" />

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.5">
<Task Name="PlcTask" Id="{8964a762-3bf6-4f78-8749-dd136e069f20}">
<!--CycleTime in micro seconds.-->
<CycleTime>10000</CycleTime>
<CycleTime>1000</CycleTime>
<Priority>20</Priority>
<PouCall>
<Name>MAIN</Name>
@ -12,6 +12,5 @@
<Fb_exit>{5c5f5f84-e7f6-4c9f-8e6b-25d1b89465a8}</Fb_exit>
<CycleUpdate>{07b2fc7d-725f-4928-b7bb-1c1ddcb9a703}</CycleUpdate>
<PostCycleUpdate>{49bd0358-5e57-44dd-9076-193288aeb9f7}</PostCycleUpdate>
<ObjectProperties />
</Task>
</TcPlcObject>

Binary file not shown.