Faits : A. Par jugement du 27 mai 2019, le Tribunal correctionnel de l'arrondissement de Lausanne a constaté que A._ s'est rendu coupable de voies de fait qualifiées, de lésions corporelles simples qualifiées, de menaces qualifiées et de viol. Il l'a condamné à une peine privative de liberté de 36 mois et a suspendu l'exécution de 30 mois de cette peine, en fixant un délai d'épreuve de 4 ans et en imposant une règle de conduite lui ordonnant de suivre, durant ce délai d'épreuve, un programme de sensibilisation du Centre de prévention de C._. Le tribunal a en outre condamné A._ à une amende de 1'500 fr. et fixé à 15 jours la peine privative de liberté de substitution en cas de non-paiement fautif de l'amende, a renoncé à ordonner son expulsion du territoire suisse et dit qu'il était débiteur envers B._ d'une indemnité de 10'000 fr. à titre de réparation du tort moral. B. Le 18 novembre 2019, la Cour d'appel pénale du Tribunal cantonal vaudois a rejeté l'appel de A._ contre le jugement du tribunal correctionnel; elle a en revanche admis partiellement l'appel du ministère public et a modifié le jugement attaqué dans ce sens qu'elle a ramené à 24 mois la partie suspendue de la peine, le délai d'épreuve restant de 4 ans. C. Les faits à l'origine de cette condamnation sont en substance les suivants. C.a. A._ est né en 1970 au Sri Lanka, pays dont il est ressortissant. Depuis 1989 il vit en Suisse et est actuellement au bénéfice d'un permis C. En 2004 il a épousé B._ dont il a eu une fille, D._, née en 2009. Les époux sont séparés depuis le 19 mai 2018. C.b. Durant toute leur vie commune, A._ a exercé une constante autorité sur son épouse. Celle-ci, qui ne s'exprime pas en français, n'avait que peu de contact avec l'extérieur, son époux faisant en sorte qu'elle reste isolée, lui interdisant de parler à des tiers, d'inviter quiconque à son domicile ou encore de téléphoner à sa famille. Parallèlement, il a exercé tout au long de la vie conjugale de multiples violences physiques, verbales et sexuelles à son encontre, jusqu'au 16 mai 2018, date à laquelle elle s'est confiée à son médecin. C.c. Abandonnant les faits antérieurs en raison de leur prescription, la cour cantonale a retenu qu'entre mai 2012 et mai 2018 A._ avait régulièrement menacé son épouse en lui disant notamment " je vais te tuer ", " je vais te couper " ou encore en lui interdisant de parler à d'autres personnes sous peine d'être frappée et tuée, précisant que si elle faisait appel à la police non seulement il la tuerait mais il tuerait également les policiers qui interviendraient. Elle a aussi admis qu'entre mai 2016 et mai 2018 il avait, à raison d'une fois par semaine environ, frappé son épouse en lui donnant des gifles et en lui tirant les cheveux. A une occasion, en janvier 2018, il lui a tiré les cheveux et l'a frappée en lui causant une coupure à la lèvre. C.d. Entre mai 2004 et mai 2018, A._ a à plusieurs reprises forcé son épouse à entretenir des relations sexuelles complètes avec lui. Alors qu'il la savait non consentante à de tels actes, il la saisissait par les épaules ou par les bras et la tirait en direction de la chambre à coucher. En menaçant son épouse de la quitter ou de la frapper, A._ parvenait à ses fins sans qu'elle oppose de résistance physique. D. A._ forme un recours en matière pénale au Tribunal fédéral. Il conclut, avec suite de frais et dépens, principalement à la réforme du jugement attaqué dans ce sens qu'il est libéré du chef d'accusation de viol et condamné à une peine pécuniaire de 180 jours-amende d'un montant à fixer à dire de justice, avec sursis pendant 4 ans, et que le montant de l'indemnité pour tort moral accordée à B._ est ramené à 1'500 fr., lui-même se voyant allouer une indemnité de 500 fr. à titre de réparation du tort moral. Subsidiairement, il conclut à l'annulation du jugement attaqué et au renvoi de la cause à l'autorité cantonale pour qu'elle statue à nouveau. Il sollicite par ailleurs l'assistance judiciaire.