Other Parts Discussed in Thread: HALCOGEN
I am unable to generate a varying PWM with the example provided in the HACoGen 4.06.00.
I have a few doubts:
1) I could not find the light sensor mentioned in the example and hence used pin6 of ADC1(connected to the onboard pot). Please correct me if I am wrong but the TMS570LC43x doesn't have a light sensor.
2) The oscilloscope showed 5000ns period with 50% duty cycle(which was set initially in HALCoGen) but doesn't change even when I rotate the potentiometer.
3) Why were the following lines of codes added? The program doesn't use EMAC right?
uint8 emacAddress[6U] = {0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU}; uint32 emacPhyAddress = 1U;
For convenience, I have attached my project file and the example code here:
/** @example example_epwm_adc.c * This is an example which describes the steps to create an example application to generate * PWM output with varying duty (depending on an external input) * * @b Step @b 1: * * Create a new project. * * Navigate: -> File -> New -> Project * * @image html example_createProject.JPG "Figure: Create a new Project" * * @b Step @b 2: * Configure driver code generation: * - Enable ETPWM driver * - Enable ADC driver * - Disable others * * Navigate: -> TMS570LCxx /RM57x -> Enable Drivers * * @b Step @b 3: * * Configure pinmux module * - Output pinmuxing : Select eTPWM1A at ball B5 * - Special pinmuxing : Use Alternate ADC 'Trigger Option-B' * Enable TBCLK sync * * Navigate: -> PINMUX ->Pin Muxing * * @image html EPWM_OutputMux.JPG "Figure: Output Pinmuxing" * * Navigate: -> PINMUX ->Pin Muxing * * @image html EPWM_SplMux.JPG "Figure: Special Pinmuxing" * * @b Step @b 4: * * Configure ADC1 module * - Select Alternate trigger EPWM_B for ADC1 Event Group * - Select Pin 9 for Event group (Pin 9 is connected to a light sensor in HDK) * * Navigate: -> ADC1 -> ADC1 Group Event * * @image html EPWM_ADC_Config1.JPG "Figure: ADC configuration" * * @b Step @b 5: * * Configure EPWM module * - Enable ETPWM1 and disable others * - Set EPWM1 period as 5000ns * - Enable ADC SOCB generation with following configuration * - SOCBSEL : CTR_PRD * - SOCBPRD : 3 * * @b Step @b 6: * * Generate HALCGen code * * @b Step @b 5: * * Copy the source code below into your sys_main.c or replace sys_main.c with this file. * * The example file can also be found in the examples folder: ../HALCoGen/examples * * @note HALCoGen generates an empty main function in sys_main.c, * please make sure that you link in the right main function or copy the source into the user code sections of this file. * * * The generated PWM signal can be monitored at pin B5. You can see the duty of the signal being * changed by varying the light density near the light sensor */ /* * Copyright (C) 2009-2015 Texas Instruments Incorporated - www.ti.com * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* USER CODE BEGIN (0) */ /* USER CODE END */ /* Include Files */ #include "HL_sys_common.h" #include "HL_system.h" /* USER CODE BEGIN (1) */ #include "HL_etpwm.h" #include "HL_adc.h" /* USER CODE END */ /** @fn void main(void) * @brief Application main function * @note This function is empty by default. * * This function is called after startup. * The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ /* USER CODE END */ uint8 emacAddress[6U] = {0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU}; uint32 emacPhyAddress = 1U; void main(void) { /* USER CODE BEGIN (3) */ _enable_interrupt_(); adcInit(); etpwmInit(); adcEnableNotification(adcREG1, adcGROUP0); adcStartConversion(adcREG1, adcGROUP0); while(1); /* USER CODE END */ } /* USER CODE BEGIN (4) */ void adcNotification(adcBASE_t *adc, uint32 group) { adcData_t data; uint32 count; uint16 cmpA; count = adcGetData(adcREG1, adcGROUP0, &data); cmpA = (etpwmREG1->TBPRD * data.value)/0xFFF; etpwmSetCmpA(etpwmREG1, cmpA); } /* USER CODE END */